//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef _GAME_TYPE_CINEMATIC_
#define _GAME_TYPE_CINEMATIC_

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "../FileSystem/irrArray.h"
#include "GameObject.h"
#include "../FileSystem/CReadFile.h"
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class CinematicObject;
class CinematicThread;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

typedef enum 
{
	E_CINEMATIC_STANDBY = 0, 
	E_CINEMATIC_EMPTY,
	E_CINEMATIC_FINISHED,
	E_CINEMATIC_IN_PROGRESS,

} E_CINEMATIC_CODES;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class Cinematic : public GameObject
{
public:
	
	Cinematic(const char* fileName);
	~Cinematic();
	
	virtual void SaveData(CWriteFile* stream);
	virtual void LoadData(CReadFile* stream);

	bool								m_isInCutscene;

	void								loadCinematic(const char* fileName);
	bool								initCinematic();
	void								updateCinematic(float t);
	void								setIsInCutscene (bool isInCutscene);
	void								parseFinalAction ();
	float								GetTime();
	s32							GetID()	{ return m_objectID;};
	void								reset();

	E_CINEMATIC_CODES					GetState() { return m_state; };

	array<CinematicThread*>	m_CinematicThreads;

private:
	E_CINEMATIC_CODES					m_state;

};
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////